///////////////////////////////////////////////////////////////////////////////
// Project: Hoyo Client Game
//
// hy_pet_db_logic.cpp
// Created: 2013-7-15
// Author: Like Cheng
///////////////////////////////////////////////////////////////////////////////

#include "hy_pet_db_logic.h"
#include "hy_pet_logic.h"

#include "hy_db/hy_db_logic.h"
#include "hy_db/hy_db_const.h"

#include "hy_net/hy_network_message.h"
#include "hy_net/hy_network_server.h"
#include "hy_net/hy_network_default.h"

#include "hy_pet_system/hy_pet_data/hy_pet_data.h"

#include "hy_common_system/hy_sequence_logic/hy_sequence_logic.h"

hy_pet_db_logic* hy_pet_db_logic_instance = NULL;
///////////////////////////////////////////////////////////////////////////////
//hy_pet_db_logic::hy_pet_db_logic
///////////////////////////////////////////////////////////////////////////////
hy_pet_db_logic::hy_pet_db_logic()
{
}
///////////////////////////////////////////////////////////////////////////////
//hy_pet_db_logic::~hy_pet_db_logic
///////////////////////////////////////////////////////////////////////////////
hy_pet_db_logic::~hy_pet_db_logic()
{

}
///////////////////////////////////////////////////////////////////////////////
//hy_pet_db_logic::instance
///////////////////////////////////////////////////////////////////////////////
hy_pet_db_logic* hy_pet_db_logic::instance()
{
	if( hy_pet_db_logic_instance == NULL )
		hy_pet_db_logic_instance = new hy_pet_db_logic;
	return hy_pet_db_logic_instance;
}
///////////////////////////////////////////////////////////////////////////////
//hy_pet_db_logic::purge_instance
///////////////////////////////////////////////////////////////////////////////
void hy_pet_db_logic::purge_instance()
{
	DEL_POINTER( hy_pet_db_logic_instance );
}
///////////////////////////////////////////////////////////////////////////////
//hy_pet_db_logic::add_pet_data
///////////////////////////////////////////////////////////////////////////////
void hy_pet_db_logic::load_player_pet_data_by_db( int player_id, bool is_update )
{
	std::string table = HY_DB_AND( HY_DB, HY_TABLE_PET );

	mongo::BSONObjBuilder con;
	con.append( "player_id", player_id );
	Json::Value bvalue = hy_db_logic::instance()->find_json_val( table.c_str(), con );
	
	hy_pet_data_map& pm = hy_pet_logic::instance()->get_pet_data_map();
	hy_pet_data_map::iterator it;

	if( bvalue.empty() )return;

	if( is_update )
	{
		hy_pet_logic::instance()->pet_data_map_clear();
	}
	for( uint i = 0u; i < bvalue.size(); i++ )
	{
		Json::Value cv = bvalue[i];
		hy_pet_data* pd = new hy_pet_data;
		pd->set_pet_id( cv["pet_id"].asInt() );
		pd->set_pet_value( cv );

		hy_pet_logic::instance()->add_pet_data( pd, is_update );
	}
}